package com.example.administrator.daggerdemo.utils;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * PackageUtils
 * <ul>
 * <strong>Install package</strong>
 * </ul>
 * 
 * @author zhengjian 2016-5-26
 */

public class GsonUtils {
	private static Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();

	public static Gson getGsonInstance(){
		if (gson == null)
		{
			gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
		}
		return gson;
	}



	public static String setCMD(String json)throws JSONException
	{
		JSONObject jsonObject=new JSONObject();
		jsonObject.accumulate("command",json);
		return jsonObject.toString();


	}

	public static String setData(Object info)
	{
//		Log.e("info",GsonUtils.toJson(info));
		return GsonUtils.toJson(info);
	}

	public static String getData(String key,String json) throws JSONException {
		JSONObject jsonobject = new JSONObject(json);
		String data = jsonobject.getString(key);
		return data;
	}

	public static String getJson(String json,String key)throws JSONException {
		JSONObject jsonobject = new JSONObject(json);
		String data = jsonobject.getString(key);
		if(data.equals("null")||data==null){
			data="";
		}
		return data;
	}

	/**
	 * 功能描述：把JSON数据转换成普通字符串列表
	 *
	 * @param jsonData
	 *            JSON数据
	 * @return
	 * @throws Exception
	 */
	public static List<String> getStringList(String jsonData) throws Exception {
		return gson.fromJson(jsonData, new TypeToken<List<String>>() {
		}.getType());
	}

	/**
	 * 功能描述：把JSON数据转换成指定的java对象
	 *
	 * @param jsonData
	 *            JSON数据
	 * @param clazz
	 *            指定的java对象
	 * @return
	 * @throws Exception
	 */
	public static <T> T getSingleBean(String jsonData, Class<T> clazz)
			throws Exception {

		return gson.fromJson(jsonData, clazz);
	}

	/**
	 * 功能描述：把JSON数据转换成指定的java对象列表
	 *
	 * @param jsonData
	 *            JSON数据
	 * @return
	 * @throws Exception
	 */
	public static <T> List<T> getBeanList(String jsonData) throws Exception {
		return gson.fromJson(jsonData, new TypeToken<List<T>>() {
		}.getType());
	}

	public static <T, clazz> List<T> getBeanList(String jsonData,Class<T> tClass) throws Exception {
		return gson.fromJson(jsonData, new TypeToken<List<clazz>>() {
		}.getType());
	}

	public static <T> List<T> getListFromJSON(String json, Class<T[]> type) {
		T[] list = gson.fromJson(json, type);
		return Arrays.asList(list); }


	/**
	 * 功能描述：把JSON数据转换成较为复杂的java对象列表
	 *
	 * @param jsonData
	 *            JSON数据
	 * @return
	 * @throws Exception
	 */
	public static List<Map<String, Object>> getBeanMapList(String jsonData)
			throws Exception {
		return gson.fromJson(jsonData,
				new TypeToken<List<Map<String, Object>>>() {
				}.getType());
	}

	public static String toJson(Object object){
		String json = gson.toJson(object);
		return json;
	}

}
